package com.haixiaoke.saas.order.service;

import com.haixiaoke.saas.common.core.domain.AjaxResult;
import com.haixiaoke.saas.order.domain.Order;
import com.haixiaoke.saas.order.domain.OrderAuditRecord;

import java.util.List;

/**
 * 订单审核记录Service接口
 *
 * @author qixi
 * @date 2024-04-02
 */
public interface IOrderAuditRecordService {
    /**
     * 查询订单审核记录
     *
     * @param recordId 订单审核记录主键
     * @return 订单审核记录
     */
    OrderAuditRecord selectOrderAuditRecordByRecordId(Long recordId);

    /**
     * 查询订单审核记录列表
     *
     * @param orderAuditRecord 订单审核记录
     * @return 订单审核记录集合
     */
    List<OrderAuditRecord> selectOrderAuditRecordList(OrderAuditRecord orderAuditRecord);

    /**
     * 新增订单审核记录
     *
     * @param orderAuditRecord 订单审核记录
     * @return 结果
     */
    int insertOrderAuditRecord(OrderAuditRecord orderAuditRecord);

    /**
     * 修改订单审核记录
     *
     * @param orderAuditRecord 订单审核记录
     * @return 结果
     */
    int updateOrderAuditRecord(OrderAuditRecord orderAuditRecord);

    int reviewOrder(OrderAuditRecord orderAuditRecord);

    /**
     * 批量删除订单审核记录
     *
     * @param recordIds 需要删除的订单审核记录主键集合
     * @return 结果
     */
    int deleteOrderAuditRecordByRecordIds(Long[] recordIds);

    /**
     * 删除订单审核记录信息
     *
     * @param recordId 订单审核记录主键
     * @return 结果
     */
    int deleteOrderAuditRecordByRecordId(Long recordId);

    /**
     * 根据订单ID查询最新的订单审核记录
     * @param orderId
     * @return
     */
    OrderAuditRecord selectOrderAuditRecordByOrderId(String orderId);

    OrderAuditRecord selectOrderAuditRecordByOrderIdAndAuditRecordState(String orderId, String recordState);

    /**
     * 查询订单审核记录取消预订的列表
     * @param orderAuditRecord
     * @return
     */
    List<OrderAuditRecord> selectAuditcanCelReservationList(OrderAuditRecord orderAuditRecord);

    /**
     * 获取退订订单审核记录详细信息
     */
    OrderAuditRecord selectOrderCancelReservationGetInfoById(Long recordId);

    /**
     * 申请退订订单审核订单
     * @param orderAuditRecord
     * @return
     */
    AjaxResult reviewCancelReservationOrder(OrderAuditRecord orderAuditRecord);

    int apartmentCountOrderState(Long userId);

    List<OrderAuditRecord> selectOrderAuditRecordByOrderIds(List<String> orderIds);
}
